package java20190326;

public class TestDriver02 {

	public static void main(String[] args) {
		test03();

	}

	/**
	 * 按引用传参
	 */
	private static void test03() {
		// 定义一个数组变量
		int[] arr0 = { 1, 2, 3, 4 }; // i是实参
		System.out.println("主函数中，在子函数调用之前实参的值：");
		// 数组打印函数
		printArr(arr0); // 此处arr0变量是实参

		// 调用子函数
		test031(arr0);// 此处arr0变量是实参

		// 子函数执行完成之后，打印实参i的值
		System.out.println("主函数中，在子函数调用之后实参的值：");
		// 数组打印函数
		printArr(arr0); // 此处arr0变量是实参
	}

	/**
	 * 子函数调用：按引用传参
	 * 
	 * @param i 函数定义时使用的，是形参
	 */
	private static void test031(int[] arr) { // 此处arr变量是形参

		// 打印子函数中的形参的值
		System.out.println("子函数中，形参接收到实参的值：");
		// 数组打印函数
		printArr(arr); // 此处arr变量是实参
		// 改变子函数中形参的值
		arr[0] += 2;
		// int ii = arr[0];
		// ii+=2;
		// System.out.println("子函数中，ii变量的值为：" + ii);
		System.out.println("子函数中，形参改变之后的值：");
		// 数组打印函数
		printArr(arr); // 此处arr变量是实参
	}

	/**
	 * 打印数组元素内容
	 * 
	 * @param arr
	 */
	public static void printArr(int[] arr) {
		for (int i : arr) {
			System.out.print("  " + i);
		}
		// 换行
		System.out.println();
	}

	/**
	 * 按值传参
	 */
	private static void test02() {
		// 定义一个变量
		String str = "Hello"; // i是实参
		System.out.println("主函数中，在子函数调用之前实参的值：" + str);
		// 调用子函数
		test021(str);
		// 子函数执行完成之后，打印实参i的值
		System.out.println("主函数中，在子函数调用之后实参的值：" + str);
	}

	/**
	 * 子函数调用：按值传参
	 * 
	 * @param i 函数定义时使用的，是形参
	 */
	private static void test021(String str0) {
		// 打印子函数中的形参的值
		System.out.println("子函数中，形参接收到实参的值：" + str0);
		// 改变子函数中形参的值
		str0 += " World!";
		System.out.println("子函数中，形参改变之后的值：" + str0);
	}

	/**
	 * 按值传参
	 */
	private static void test01() {
		// 定义一个变量
		int i = 10; // i是实参
		System.out.println("主函数中，在子函数调用之前实参的值：" + i);
		// 调用子函数
		test011(i);
		// 子函数执行完成之后，打印实参i的值
		System.out.println("主函数中，在子函数调用之后实参的值：" + i);
	}

	/**
	 * 子函数调用：按值传参
	 * 
	 * @param i 函数定义时使用的，是形参
	 */
	private static void test011(int i) {
		// 打印子函数中的形参的值
		System.out.println("子函数中，形参接收到实参的值：" + i);
		// 改变子函数中形参的值
		i += 2;
		System.out.println("子函数中，形参改变之后的值：" + i);
	}

}
